#include <stdio.h>
#include <stdlib.h>

typedef struct QNode{
	int data;
	struct QNode* next;
} QNode;

//初始化队列
QNode* init_link_queue();

//入队
QNode* in_data(QNode* head,int data); 

//出队
QNode* out_data(QNode* head); 


//展示当前队列中的元素
void display(QNode* head); 
int main()
{
	QNode* head=init_link_queue();
	for(int i=1;i<=5;i++)
	{
		in_data(head,i);
	}
	
	display(head);
	
//	out_data(head);
//	out_data(head);
//	
//	display(head);
	
	system("pause");
	return 0;
}

QNode* init_link_queue()
{
	QNode* head=(QNode* )malloc(sizeof(QNode));
	head->next=NULL;
	head->data=0;
	return head;
}

QNode* in_data(QNode* head,int data)
{
	QNode* new_node=(QNode* )malloc(sizeof(QNode));
	new_node->data=data;
	new_node->next=NULL; 
	//判断当前是否只有一个节点
	if(head->next==NULL)
	{
		head->next=new_node;
		return head;	
	} 
	
	QNode* tmp=head;
	//找到最后一个元素
	while(tmp->next!=NULL)
	{
		tmp=tmp->next;
	}
	tmp->next=new_node;
	return head;
}

void display(QNode* head)
{
	QNode* tmp=head;
	while(tmp->next!=NULL)
	{
		printf("%d\n",tmp->data);
		tmp=tmp->next;
	}
}

QNode* out_data(QNode* head)
{
	//判断队列是否为空
	if(head==NULL)
	{
		printf("队列为空\n");
		return NULL;
	} 
	
	//判断队列是否为最后一个元素
	if(head->next==NULL)
	{
		printf("正在释放最后一个头元素\n");
		free(head);
		return NULL; 
	} 
	
	QNode* tmp=head;
	head=head->next;
	printf("出队列:%d\n",head->data);
	tmp->next=NULL;
	free(tmp);
	return head;
}
